#pragma once

#include <algorithm/shared/data/topology/geometry/Geometry.h>
#include <algorithm/shared/utils/Vec3.h>
#include <utils/HasValue.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

namespace solar
{
    class Cylinder3D : public Geometry
    {
        public:
            [[nodiscard]] auto getType() const -> GeometryType override { return type_; }
#include <utils/class_name.inc>
        private:
            double height_;
            double radius_;
            // 圆柱的中心
            Vec3 center_{kUndefined, kUndefined, kUndefined};
            static constexpr const GeometryType type_ = GeometryType::kGeometryCylinder3D;
            BOOST_DESCRIBE_CLASS(Cylinder3D, (Geometry), (), (), (height_, radius_, center_, type_))
    };

} // namespace solar
#define CURRENT_CLASS_NAME Cylinder3D
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(Cylinder3D, (Geometry), (), (), (height_, radius_, center_, type_))
